﻿Imports WSEntidades
Public Class csUtilsAddenda
    Private cadenaComercial As String
    Public Function ProcesaConfig(ByVal currentrow As String(), ByRef Resp As List(Of RespuestaPremium))
        Try
            If (currentrow.Length = 5 And currentrow(0) = "07") Then
                If (currentrow(1) = "CVEADD") Then
                    If (currentrow(2) = "MF") Then
                        If (currentrow(3) <> "" And (currentrow(3) = "CH" Or currentrow(3) = "WM" Or currentrow(3) = "SO" Or currentrow(3) = "SA" Or _
                                                     currentrow(3) = "OX" Or currentrow(3) = "HE" Or currentrow(3) = "CM" Or currentrow(3) = "MB" Or _
                                                     currentrow(3) = "FL" Or currentrow(3) = "FU" Or currentrow(3) = "BD" Or currentrow(3) = "EK" Or _
                                                     currentrow(3) = "VW" Or currentrow(3) = "NS" Or currentrow(3) = "CP" Or currentrow(3) = "EX" Or _
                                                     currentrow(3) = "LV" Or currentrow(3) = "CS" Or currentrow(3) = "DC" Or currentrow(3) = "SS" Or _
                                                     currentrow(3) = "AZ" Or currentrow(3) = "SC" Or currentrow(3) = "CN" Or currentrow(3) = "3B" Or _
                                                     currentrow(3) = "GC" Or currentrow(3) = "CU" Or currentrow(3) = "HS" Or currentrow(3) = "CT" Or _
                                                     currentrow(3) = "FG" Or currentrow(3) = "AS" Or currentrow(3) = "GS" Or currentrow(3) = "ML")) Then
                            cadenaComercial = currentrow(3)
                        Else
                            ValidaCFDi.AgregaRespuesta("07", 4, "El contenido del documento TXT no es correcto. Cadena Comercial Incorrecta: Los posibles valores son CH, WM o SO.", Resp)
                        End If
                    Else
                        ValidaCFDi.AgregaRespuesta("07", 3, "El contenido del documento TXT no es correcto. La seccion 07 no contiene la constante MF", Resp)
                    End If
                Else
                    ValidaCFDi.AgregaRespuesta("07", 2, "El contenido del documento TXT no es correcto. La seccion 07 no contiene el indicador CVEADD", Resp)
                End If
            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto. La seccion 07 no corresponde con el formato especificado", Resp)
            End If
            Return True
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try
    End Function
    Public Function ProcesaEncabezado(ByVal currentrow As String(), ByVal comprobante As Comprobante, _
                                      ByVal nombreTxt As String, ByRef Resp As List(Of RespuestaPremium), _
                                      ByRef add As MasFactur.AddMasFactura.DocumentoFacturaMasFactura)
        Try
            If (currentrow.Length = 28) Then
                add.Versio = currentrow(2)
                If (add.Versio <> "1.0") Then
                    ValidaCFDi.AgregaRespuesta("07", 3, "El contenido del documento TXT no es correcto,el atributo VERSIO contiene un valor incorrecto", Resp)
                End If

                add.Tradpp = currentrow(3).Trim()
                If (add.Tradpp = "" Or add.Tradpp <> "MASTEDI") Then
                    ValidaCFDi.AgregaRespuesta("07", 4, "El contenido del documento TXT no es correcto,el atributo TRADPR (Id del proveedor) contiene un valor incorrecto, el valor debe ser MASTEDI.", Resp)
                End If

                add.Ctppro = currentrow(4).Trim()
                If (add.Ctppro = "" Or add.Ctppro.Length > 2 Or add.Ctppro <> "ZZ") Then
                    ValidaCFDi.AgregaRespuesta("07", 5, "El contenido del documento TXT no es correcto,el atributo  (Calificador proveedor) contiene un valor incorrecto, el valor debe ser ZZ.", Resp)
                End If

                add.Numfol = comprobante.folio
                If Not (IsNumeric(add.Numfol)) Then
                    ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto,el atributo  (Folio) contiene un valor incorrecto", Resp)
                End If

                If Not (comprobante.serie Is Nothing) Then
                    add.Serfol = comprobante.serie
                End If

                add.Fecexp = comprobante.fecha
                add.Noapro = "0"
                add.Forpag = comprobante.formaDePago
                add.Metpag = comprobante.metodoDePago

                If (currentrow(5).Length > 0) Then
                    add.Numche = currentrow(5)
                End If


                add.Tipdoc = currentrow(6)
                add.Nomdoc = nombreTxt & "-" & comprobante.Emisor.rfc & "_" & comprobante.serie & comprobante.folio & "_" & comprobante.fecha.ToString("yyyyMMdd")
                add.Fundoc = currentrow(7)
                add.Tipmon = currentrow(8)
                add.Tipcam = currentrow(9)
                add.Diapag = currentrow(10)
                add.Pdppag = currentrow(11)
                add.Mdppag = currentrow(12)
                add.Numeoc = currentrow(13)
                add.Fechoc = currentrow(14)
                add.Notas1 = currentrow(15)
                add.Notas2 = currentrow(16)
                add.Notas3 = Utils.totalALetrasCFDI(comprobante.total, add.Tipmon)
                add.Numdpt = currentrow(17)
                add.Nomdpt = currentrow(18)
                add.Feccon = currentrow(19)
                add.Contra = currentrow(20)
                add.Tda_contra = currentrow(21)
                add.Po_numeoc = currentrow(22)
                add.Ieps_id = currentrow(23)
                add.Reffac = currentrow(24)
                add.Hojneg = currentrow(25)
                add.Numcli = currentrow(26)
                add.Flete = currentrow(27)
                Dim Valid As New Masfactura
                ''Lllamamos al método de validación de Karo.!
                If (Valid.isValid_Encabezado(Resp, add, Me.cadenaComercial)) Then
                    Return True
                Else
                    Return False
                End If
            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto,longitud incorrecta para sección ENCABEZADO", Resp)
                Return False
            End If

        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try
    End Function
  
    Public Function ProcesaEmisor(ByVal currentrow As String(), ByVal comprobante As Comprobante, _
                                  ByRef Resp As List(Of RespuestaPremium), ByRef add As MasFactur.AddMasFactura.DocumentoFacturaMasFactura)
        Try
            If (currentrow.Length = 7) Then
                add.Rfcemi = comprobante.Emisor.rfc
                add.Nomemi = comprobante.Emisor.nombre
                add.Eanemi = currentrow(2)
                add.Numemi = currentrow(3)
                If (comprobante.Emisor.DomicilioFiscal Is Nothing) Then
                    ValidaCFDi.AgregaRespuesta("07", 0, "El comprobante no contiene el domicilio fiscal", Resp)
                End If

                add.Calemi = comprobante.Emisor.DomicilioFiscal.calle

                If Not (comprobante.Emisor.DomicilioFiscal.noExterior Is Nothing) Then
                    add.Nexemi = comprobante.Emisor.DomicilioFiscal.noExterior
                Else
                    add.Nexemi = ""
                End If

                If Not (comprobante.Emisor.DomicilioFiscal.noInterior Is Nothing) Then
                    add.Ninemi = comprobante.Emisor.DomicilioFiscal.noInterior
                Else
                    add.Ninemi = ""
                End If

                If Not (comprobante.Emisor.DomicilioFiscal.colonia Is Nothing) Then
                    add.Colemi = comprobante.Emisor.DomicilioFiscal.colonia
                Else
                    add.Colemi = ""
                End If

                If Not (comprobante.Emisor.DomicilioFiscal.localidad Is Nothing) Then
                    add.Locemi = comprobante.Emisor.DomicilioFiscal.localidad
                Else
                    add.Locemi = ""
                End If

                If Not (comprobante.Emisor.DomicilioFiscal.referencia Is Nothing) Then
                    add.Refemi = comprobante.Emisor.DomicilioFiscal.referencia
                Else
                    add.Refemi = ""
                End If


                add.Munemi = comprobante.Emisor.DomicilioFiscal.municipio
                add.Estemi = comprobante.Emisor.DomicilioFiscal.estado
                add.Paiemi = comprobante.Emisor.DomicilioFiscal.pais
                add.Codemi = comprobante.Emisor.DomicilioFiscal.codigoPostal
                add.Mailemi = currentrow(4)
                add.Ri_emi = currentrow(5)
                add.Eanexp = currentrow(6)

                If (comprobante.Emisor.ExpedidoEn Is Nothing) Then
                    Throw New Exception("El comprobante no contiene el nodo Expedido EN")
                End If

                If Not (comprobante.Emisor.ExpedidoEn.calle Is Nothing) Then
                    add.Calexp = comprobante.Emisor.ExpedidoEn.calle
                Else
                    add.Calexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.noExterior Is Nothing) Then
                    add.Nexexp = comprobante.Emisor.ExpedidoEn.noExterior
                Else
                    add.Nexexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.noInterior Is Nothing) Then
                    add.Ninexp = comprobante.Emisor.ExpedidoEn.noInterior
                Else
                    add.Ninexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.colonia Is Nothing) Then
                    add.Colexp = comprobante.Emisor.ExpedidoEn.colonia
                Else
                    add.Colexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.localidad Is Nothing) Then
                    add.Colexp = comprobante.Emisor.ExpedidoEn.localidad
                Else
                    add.Colexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.referencia Is Nothing) Then
                    add.Refexp = comprobante.Emisor.ExpedidoEn.referencia
                Else
                    add.Refexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.municipio Is Nothing) Then
                    add.Munexp = comprobante.Emisor.ExpedidoEn.municipio
                Else
                    add.Munexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.estado Is Nothing) Then
                    add.Estexp = comprobante.Emisor.ExpedidoEn.estado
                Else
                    add.Estexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.pais Is Nothing) Then
                    add.Paiexp = comprobante.Emisor.ExpedidoEn.pais
                Else
                    add.Paiexp = ""
                End If

                If Not (comprobante.Emisor.ExpedidoEn.codigoPostal Is Nothing) Then
                    add.Codexp = comprobante.Emisor.ExpedidoEn.codigoPostal
                Else
                    add.Codexp = ""
                End If
                Dim Valid As New Masfactura
                ''Lllamamos al método de validación de Karo.!
                If (Valid.isValid_Emisor(Resp, add, Me.cadenaComercial)) Then
                    Return True
                Else
                    Return False
                End If
            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto,longitud incorrecta para sección EMISOR", Resp)
                Return False
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try

    End Function

    Public Function ProcesaReceptor(ByVal currentrow As String(), ByVal comprobante As Comprobante, _
                                    ByRef Resp As List(Of RespuestaPremium), ByRef add As MasFactur.AddMasFactura.DocumentoFacturaMasFactura)
        Try

            If (currentrow.Length = 21) Then

                If (comprobante.Receptor.Domicilio Is Nothing) Then
                    ValidaCFDi.AgregaRespuesta("07", 0, "El comprobante no contiene el domicilio fiscal del receptor", Resp)
                End If

                If Not (comprobante.Receptor.rfc Is Nothing) Then
                    add.Rfcrec = comprobante.Receptor.rfc
                Else
                    add.Rfcrec = ""
                End If

                If Not (comprobante.Receptor.nombre Is Nothing) Then
                    add.Nomrec = comprobante.Receptor.nombre
                Else
                    add.Nomrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.calle Is Nothing) Then
                    add.Calrec = comprobante.Receptor.Domicilio.calle
                Else
                    add.Calrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.noExterior Is Nothing) Then
                    add.Nexrec = comprobante.Receptor.Domicilio.noExterior
                Else
                    add.Nexrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.noInterior Is Nothing) Then
                    add.Ninrec = comprobante.Receptor.Domicilio.noInterior
                Else
                    add.Ninrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.colonia Is Nothing) Then
                    add.Colrec = comprobante.Receptor.Domicilio.colonia
                Else
                    add.Colrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.localidad Is Nothing) Then
                    add.Locrec = comprobante.Receptor.Domicilio.localidad
                Else
                    add.Locrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.referencia Is Nothing) Then
                    add.Refrec = comprobante.Receptor.Domicilio.referencia
                Else
                    add.Refrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.municipio Is Nothing) Then
                    add.Munrec = comprobante.Receptor.Domicilio.municipio
                Else
                    add.Munrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.estado Is Nothing) Then
                    add.Estrec = comprobante.Receptor.Domicilio.estado
                Else
                    add.Estrec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.pais Is Nothing) Then
                    add.Pairec = comprobante.Receptor.Domicilio.pais
                Else
                    add.Pairec = ""
                End If

                If Not (comprobante.Receptor.Domicilio.codigoPostal Is Nothing) Then
                    add.Codrec = comprobante.Receptor.Domicilio.codigoPostal
                Else
                    add.Codrec = ""
                End If

                add.Eanrec = currentrow(2)
                add.Bodrec = currentrow(3)
                add.Ri_rec = currentrow(4)
                If Not (currentrow(5) = "ENTREGA") Then
                    Throw New Exception("Falta el indicador ENTREGA")
                End If
                add.Rfcent = currentrow(6)
                add.Noment = currentrow(7)
                add.Calent = currentrow(8)
                add.Nexent = currentrow(9)
                add.Ninent = currentrow(10)
                add.Colent = currentrow(11)
                add.Locent = currentrow(12)
                add.Refent = currentrow(13)
                add.Munent = currentrow(14)
                add.Estent = currentrow(15)
                add.Paient = currentrow(16)
                add.Codent = currentrow(17)
                add.Eanent = currentrow(18)
                add.Numtie = currentrow(19)
                add.Bodent = currentrow(20)
                Dim Valid As New Masfactura
                ''Lllamamos al método de validación de Karo.!
                If (Valid.isValid_Receptor(Resp, add, Me.cadenaComercial)) Then
                    Return True
                Else
                    Return False
                End If

            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto,longitud incorrecta para sección RECEPTOR", Resp)
                Return False
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try

    End Function

    Public Function ProcesaConceptos(ByVal currentrow As String(), _
                                     ByVal currentCompr As List(Of String()), _
                                     ByVal comprobante As Comprobante, _
                                     ByRef Resp As List(Of RespuestaPremium), _
                                     ByRef add As MasFactur.AddMasFactura.DocumentoFacturaMasFactura)
        Try
            Dim i As Integer = 0
            If (add.Conceptos Is Nothing) Then
                ReDim add.Conceptos(currentCompr.Count - 1)
            End If
            If (currentrow(2) <> "") Then
                'For Each current As String() In currentrow
                If (currentrow.Length = 36) Then
                    If (currentrow(1).ToString() = "DETALLE") Then
                        i = Convert.ToString(Convert.ToInt32(currentrow(2)) - 1)
                        add.Conceptos(i) = New MasFactur.AddMasFactura.Detalle()
                        add.Conceptos(i).Numlin = currentrow(2)
                        add.Conceptos(i).Cantid = comprobante.Conceptos(i).cantidad.ToString()
                        add.Conceptos(i).Cantip = currentrow(3)
                        add.Conceptos(i).Canpaq = currentrow(4)
                        add.Conceptos(i).Canemp = currentrow(5)
                        add.Conceptos(i).Unidad = comprobante.Conceptos(i).unidad
                        add.Conceptos(i).Cvesku = currentrow(6)
                        add.Conceptos(i).Codupc = currentrow(7)
                        add.Conceptos(i).Piepem = currentrow(8)
                        add.Conceptos(i).Coddun = currentrow(9)
                        add.Conceptos(i).Estilv = currentrow(10)
                        add.Conceptos(i).Colorv = currentrow(11)
                        add.Conceptos(i).Tallav = currentrow(12)
                        add.Conceptos(i).Descri = comprobante.Conceptos(i).descripcion
                        add.Conceptos(i).Pbrude = comprobante.Conceptos(i).valorUnitario
                        add.Conceptos(i).Impbru = comprobante.Conceptos(i).importe
                        add.Conceptos(i).Tdecon = currentrow(13)
                        add.Conceptos(i).Mdecon = currentCompr(i)(7).ToString()
                        add.Conceptos(i).Cdecon = currentrow(14)
                        add.Conceptos(i).Valuni = currentrow(15)
                        add.Conceptos(i).Import = currentrow(16)
                        add.Conceptos(i).Tdecon0 = currentrow(17)
                        add.Conceptos(i).Mdecon0 = currentrow(18)
                        add.Conceptos(i).Tdecon1 = currentrow(19)
                        add.Conceptos(i).Mdecon1 = currentrow(20)
                        add.Conceptos(i).Tdecon2 = currentrow(21)
                        add.Conceptos(i).Mdecon2 = currentrow(22)
                        add.Conceptos(i).Tdecon3 = currentrow(23)
                        add.Conceptos(i).Mdecon3 = currentrow(24)
                        If (currentCompr(i)(15).ToString() <> "") Then
                            If (currentCompr(i)(15).ToString().ToUpper() <> "EXENTO") Then
                                add.Conceptos(i).Tasipe = currentCompr(i)(15).ToString()
                                add.Conceptos(i).Monipe = currentCompr(i)(16).ToString()
                            Else
                                add.Conceptos(i).Tasipe = ""
                                add.Conceptos(i).Monipe = ""
                            End If
                        End If
                        If (currentCompr(i)(18).ToString() <> "") Then
                            If (currentCompr(i)(18).ToString().ToUpper() <> "EXENTO") Then
                                add.Conceptos(i).Tasiep = currentCompr(i)(18).ToString()
                                add.Conceptos(i).Moniep = currentCompr(i)(19).ToString()
                            Else
                                add.Conceptos(i).Tasiep = ""
                                add.Conceptos(i).Moniep = ""
                            End If
                        End If
                        add.Conceptos(i).Ivaret_p = currentrow(25)
                        add.Conceptos(i).Ivaret_d = currentrow(26)
                        add.Conceptos(i).Isrret_p = currentrow(27)
                        add.Conceptos(i).Isrret_d = currentrow(28)
                        add.Conceptos(i).Numadu = currentCompr(i)(9).ToString()
                        add.Conceptos(i).Fecadu = currentCompr(i)(10).ToString()
                        add.Conceptos(i).Aduana = currentCompr(i)(11).ToString()
                        add.Conceptos(i).Eanadu = currentrow(29)
                        add.Conceptos(i).Cuepre = currentCompr(i)(12).ToString()
                        add.Conceptos(i).Notasp1 = currentrow(30)
                        add.Conceptos(i).Notasp2 = currentrow(31)
                        add.Conceptos(i).Material = currentrow(32)
                        add.Conceptos(i).Relleno = currentrow(33)
                        add.Conceptos(i).Kilataje = currentrow(34)
                        add.Conceptos(i).Peso = currentrow(35)
                    Else
                        Throw New Exception("El contenido del documento TXT no es correcto, EL indicador no corresponde a DETALLE.")
                    End If
                Else
                    Throw New Exception("El contenido del documento TXT no es correcto,longitud incorrecta para sección DETALLE")
                End If

                ' Next
                Dim Valid As New Masfactura
                ''Lllamamos al método de validación de Karo.!
                If (Valid.isValid_Conceptos(Resp, add, Me.cadenaComercial, i)) Then
                    Return True
                Else
                    Return False
                End If
            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto, No contiene Numero de Linea.", Resp)
                Return False
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try

    End Function

    Public Function ProcesaTotales(ByVal currentrow As String(), ByVal comprobante As Comprobante, _
                                   ByRef Resp As List(Of RespuestaPremium), ByRef add As MasFactur.AddMasFactura.DocumentoFacturaMasFactura)
        Try
            If (currentrow.Length = 13) Then
                add.Totlpf = comprobante.total
                add.Subtbr = comprobante.subTotal
                add.Mondes = currentrow(2)
                add.Subto2 = currentrow(3)
                add.Coddes = currentrow(4)
                add.Mondet = comprobante.descuento.ToString()
                add.Prcdsg = currentrow(5)
                add.Subtsi = currentrow(6)
                add.Subtai = currentrow(7)
                add.Subtot = currentrow(8)
                add.Totiva = currentrow(9)
                add.Ivatra = currentrow(10)
                add.Tatiep = currentrow(11)
                add.Ieptra = currentrow(12)
                add.Prc_ivaret = "0"
                add.Ivaret = "0"
                add.Prc_isrret = "0"
                add.Isrret = "0"
                add.Totpag = comprobante.total.ToString()

                Dim Valid As New Masfactura
                ''Lllamamos al método de validación de Karo.!
                If (Valid.isValid_Totales(Resp, add, Me.cadenaComercial)) Then
                    Return True
                Else
                    Return False
                End If
            Else
                ValidaCFDi.AgregaRespuesta("07", 0, "El contenido del documento TXT no es correcto,longitud incorrecta para sección RECEPTOR", Resp)
                Return False
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
            Return False
        End Try
    End Function

End Class
